{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "36845781-0407-4cf8-a61b-48abf0de297e",
   "metadata": {},
   "source": [
    "Chapter 11\n",
    "# 加权无向图\n",
    "Book_6《数据有道》 | 鸢尾花书：从加减乘除到机器学习"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "8edd50af-38e1-4715-b7d7-a49cc1b00bcf",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import networkx as nx"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "2acbea4d-5e3c-4f48-9e0d-e37248c45533",
   "metadata": {},
   "outputs": [],
   "source": [
    "weighted_G = nx.Graph()\n",
    "# 创建无向图的实例\n",
    "\n",
    "weighted_G.add_nodes_from(['a', 'b', 'c', 'd'])\n",
    "# 添加多个顶点\n",
    "\n",
    "weighted_G.add_edges_from([('a','b', {'weight':10}),\n",
    "                           ('b','c', {'weight':20}),\n",
    "                           ('b','d', {'weight':30}), \n",
    "                           ('c','d', {'weight':40}),\n",
    "                           ('c','a', {'weight':50})])\n",
    "# 增加一组边，并赋予权重"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "439d12e2-7941-4af4-b1b1-6aeaf851066b",
   "metadata": {},
   "outputs": [],
   "source": [
    "edge_weights = [weighted_G[i][j]['weight'] for i, j in weighted_G.edges]\n",
    "# 所有边的权重\n",
    "\n",
    "edge_labels = nx.get_edge_attributes(weighted_G, \"weight\")\n",
    "# 所有边的标签"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "12225aaf-c03f-469d-90ac-cde8b86199b0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{('a', 'b'): Text(0.5008270837056663, -0.1367719076005518, '10'),\n",
       " ('a', 'c'): Text(0.2337679190810387, -0.6851493876942851, '50'),\n",
       " ('b', 'c'): Text(0.07852013527882881, 0.17807870470516307, '20'),\n",
       " ('b', 'd'): Text(-0.23376791908103872, 0.6851493876942851, '30'),\n",
       " ('c', 'd'): Text(-0.5008270837056663, 0.1367719076005518, '40')}"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 600x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize = (6,6))\n",
    "pos = nx.spring_layout(weighted_G)\n",
    "nx.draw_networkx(weighted_G,\n",
    "                 pos = pos,\n",
    "                 with_labels = True,\n",
    "                 node_size = 180,\n",
    "                 edge_color=edge_weights,\n",
    "                 edge_cmap = plt.cm.RdYlBu,\n",
    "                 edge_vmin = 10, edge_vmax = 50)\n",
    "\n",
    "nx.draw_networkx_edge_labels(weighted_G, \n",
    "                             pos = pos, \n",
    "                             edge_labels=edge_labels, \n",
    "                             font_color='k')\n",
    "\n",
    "# plt.savefig('加权无向图.svg')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "9ee1d66b-d0f2-4bd8-be21-dc95e03312be",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "matrix([[ 0., 10., 50.,  0.],\n",
       "        [10.,  0., 20., 30.],\n",
       "        [50., 20.,  0., 40.],\n",
       "        [ 0., 30., 40.,  0.]])"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "nx.to_numpy_matrix(weighted_G)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ffe8b961-b403-4311-8050-c50d84070284",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5805dffd-4f0c-46fe-8a4e-20b8dd6d47a5",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
